package com.desire.service.sys.impl;

import com.desire.bean.sys.Dept;
import com.desire.common.Base.BaseServiceImpl;
import com.desire.mapper.sys.DeptMapper;
import com.desire.service.sys.DeptService;
import com.desire.utils.StringUtils;
import org.springframework.stereotype.Service;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * @author LittleDesire
 * @description
 * @date 2022-05-14 周六 16:49
 * @since 17
 */
@Service
public class DeptServiceImpl extends BaseServiceImpl<Dept, DeptMapper> implements DeptService {
    /**
     * 默认的部门pid
     */
    private final String DEFAULT_PARENT_ID = "1";

    @Override
    public int save(Dept dept) {
        // 生成部门编号
        String pid = dept.getPid();
        if (StringUtils.isBland(pid)) {
            pid = DEFAULT_PARENT_ID;
            dept.setPid(pid);
        }
        String maxCode = null;
        // 查询最大编号
        String code = mapper.queryMaxCode(dept.getEuid(), pid);
        if (null == code) {
            // 如果不存在， 定义一个默认值
            if (DEFAULT_PARENT_ID.equals(pid)) {
                maxCode = "101";
            } else {
                // 如果pid不是默认的值
                code = mapper.queryCodeById(dept.getPid());
                // 新编号是当前编号的子编号
                maxCode = code + "01";
            }
        } else {
            // 存在
            maxCode = getNextCode(code);
        }
        dept.setDeptno(maxCode);
        return mapper.save(dept);
    }

    /**
     * 获取当前编码+1后的新编号
     *
     * @param code 老编号
     * @return +1 后的新编号
     */
    String getNextCode(String code) {
        // 获取编码后两位 然后进行 +1 操作
        int num = Integer.parseInt(code.substring(code.length() - 2)) + 1;
        // 拼接在一起进行返回
        return code.substring(0, code.length() - 2) + String.format("%02d", num);
    }

    @Override
    public List<Map<String, Object>> queryChildDept(Map<String, Object> map) {
        if (!map.containsKey("pid") || "".equals(map.get("pid").toString())) {
            map.put("pid", "1");
        }
        return mapper.queryChildDept(map);
    }

    @Override
    public List<Map<String, Object>> queryTree(Map<String, Object> map) {
        if (!map.containsKey("pid") || "".equals(map.get("pid").toString())) {
            map.put("pid", "1");
        }
        List<Map<String, Object>> list = mapper.queryTree(map);
        for (Map<String, Object> tmp : list) {
            int c = Integer.parseInt(tmp.get("childs").toString());
            tmp.put("isLeaf", c <= 0);
            tmp.remove("childs");
        }
        return list;
    }

    /**
     * 删除部门，根据id  返回信息
     *
     * @param id 要删除的数据id
     * @return 0失败 1成功 2 有子部门
     */
    @Override
    public int delete(Serializable id) {
        // 需要确定要删除部门是否有子部门存在
        int i = mapper.queryChildExist(id);
        if (i > 0) {
            return 2;
        }
        return mapper.delete(id);
    }
}










